package com.correportuvida.posicion;

import java.util.HashSet;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;

import com.correportuvida.Seguidor.GPS;
import com.correportuvida.Seguidor.SeguidorDeEntrenamiento;
import com.google.android.gms.maps.model.LatLng;

public class ActualizadorDePosicion {
	
	private Set<ObservadorDePosicion> subscriptos;
	private Timer timer;
	private TimerTask task;
	private SeguidorDeEntrenamiento unSeguidor;
	private GPS gps;
	private LatLng posicion;
	
	public ActualizadorDePosicion() {
		this.subscriptos = new HashSet<ObservadorDePosicion>();
		this.gps = new GPS();
		this.timer = new Timer();
		this.posicion = gps.getPosicion();
		this.task = new TimerTask() {
			
			@Override
			public void run() {
				ActualizadorDePosicion.this.onTimer();
			}
			
		};
	}
	
	public void subscribir(ObservadorDePosicion unObservador) {
		subscriptos.add(unObservador);
	}
	
	public void comenzar() {
		this.timer.scheduleAtFixedRate(this.task, 0, 
				this.seguidor().modoDeConsumo().getIntervaloDeSensado());
		this.onTimer();
	}
	
	public void detener() {
		this.task.cancel();
	}
	
	public void onTimer() {
		this.posicion = gps.getPosicion();
		for (ObservadorDePosicion unObservador : this.subscriptos) {
			unObservador.actualizar(this);
		}
	}
	
	public void setSeguidor(SeguidorDeEntrenamiento unSeguidor) {
		this.unSeguidor = unSeguidor;
	}
	
	public SeguidorDeEntrenamiento seguidor() {
		return this.unSeguidor;
	}
	
	public GPS gps() {
		return this.gps;
	}
	
	public LatLng posicionDelCorredor() {
		return this.posicion;
	}
	
}
